package com.legendframework.dao.wrapper.interfaces;

import java.io.Serializable;
import java.util.function.Function;

/**
 * Wrapper条件嵌套
 */
public interface Nested<Param, R> extends Serializable {

    /**
     * ignore
     */
    default R and(Function<Param, Param> func) {
        return and(true, func);
    }

    /**
     * AND 嵌套
     * <p>
     * 例: and(i -&gt; i.eq("name", "李白").ne("status", "活着"))
     * </p>
     *
     * @param condition 执行条件
     * @param func      函数
     * @return R
     */
    R and(boolean condition, Function<Param, Param> func);

    /**
     * ignore
     */
    default R or(Function<Param, Param> func) {
        return or(true, func);
    }

    /**
     * OR 嵌套
     * <p>
     * 例: or(i -&gt; i.eq("name", "李白").ne("status", "活着"))
     * </p>
     *
     * @param condition 执行条件
     * @param func      函数
     * @return R
     */
    R or(boolean condition, Function<Param, Param> func);
}
